1 /* Copyright 2002-2016 CS Systèmes d'Information
2 * Licensed to CS Systèmes d'Information (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 /**
18 *
19 * This package provides interface to represent the position and geometry of
20 * space objects such as stars, planets or asteroids.
21 *
22 *<p>
23 * The position of celestial bodies is represented by the {@link
24 * org.orekit.bodies.CelestialBody} interface. This interface provides the methods
25 * needed to either consider the body as an external one for its gravity or lighting
26 * influence on spacecraft (typically in perturbing force computation) or as an internal
27 * one with its own frame.
28 *</p>
29 *
30 *<p>
31 * The {@link org.orekit.bodies.CelestialBodyFactory} class is a factory providing several
32 * predefined instances implementing the {@link org.orekit.bodies.CelestialBody}
33 * interface for the main solar system bodies. The Sun, the Moon, the eight planets and
34 * the Pluto dwarf planet are the supported bodies. In addition to these real bodies,
35 * two points are supported for convenience as if they were real bodies: the solar system
36 * barycenter and the Earth-Moon barycenter. The {@link org.orekit.bodies.CelestialBodyFactory}
37 * factory relies on the JPL DE 405, 406 or similar binary ephemerides files to compute all
38 * positions and velocities. Note that the binary files are used, not the ASCII ones,
39 * regardless of the processor endianness.
40 *</p>
41 *
42 *<p>
43 * As an example, computing the position of the Sun and the Moon in the EME2000 frame,
44 * this done as follows:
45 *</p>
46 *
47 *<pre>
48 * CelestialBody sun = CelestialBodyFactory.getSun();
49 * CelestialBody moon = CelestialBodyFactory.getMoon();
50 * Vector3D sunInEME2000 = sun.getPVCoordinates(date, Frame.getEME2000()).getPosition();
51 * Vector3D moonInEME2000 = moon.getPVCoordinates(date, Frame.getEME2000()).getPosition();
52 *</pre>
53 *
54 *<p>
55 * Since the supported bodies implement the {@link org.orekit.bodies.CelestialBody}
56 * interface, they all provide their own body-centered inertial frame, hence adding a few
57 * more frames to the ones provided by the {@link org.orekit.frames} package. Since the
58 * frames tree is rooted at an Earth-centered frame, the solar system bodies frames tree
59 * does not seems in canonical shape. This of course is only a side effect of the
60 * arbitrary choice of GCRF as the root frame and has no effect at all on computations.
61 *</p>
62 *
63 *<p>
64 * The shape of celestial bodies is represented by the {@link org.orekit.bodies.BodyShape}
65 * interface.
66 *</p>
67 *
68 *<p>
69 * Only one implementation is provided by OREKIT for now: the {@link
70 * org.orekit.bodies.OneAxisEllipsoid} class which represents the natural flattened shape
71 * of big space rotating bodies like planets or the Sun.
72 *</p>
73 *
74 *<p>
75 * For asteroids, it is expected that users provide their own shape models, for example
76 * based on triangulation. They should implement the {@link org.orekit.bodies.BodyShape}
77 * interface in order to be used by Orekit.
78 *</p>
79 *
80 *<p>
81 * When using {@link org.orekit.bodies.OneAxisEllipsoid} body representation, points are
82 * generally described in associated body frame, by so-called <i>geodetic</i> coordinates
83 * (longitude, latitude, altitude). The {@link org.orekit.bodies.GeodeticPoint} class allows
84 * handling of such coordinates. It is a simple container that does not provide processing
85 * methods.
86 *</p>
87 *
88 *@author L. Maisonobe
89 *
90 */
91 package org.orekit.bodies;